As known in the art, software code comprises instructions that may be used to control or instruct the operation of one or more processing devices, such as microprocessors, microcontrollers, co-processors, etc. It is not uncommon for software development projects to require the services of numerous software code developers and their supervisors for periods of time stretching over many months or even years. A software development project involves several types of tasks, such as coding, writing tests for the code, performing the tests, analyzing the results, and debugging.
Software developers often face problems in performing the tasks assigned to them in a software project. While the problem remains unresolved, the developers' projects may be stalled. A developer may not have the information necessary to solve the problem. If the information is available, the developer may not know how to apply the information to solve the problem. In addition, frequently, problems may recur. In many cases, developers themselves may not be able to detect a trend of problems they are repeatedly encountering. Even if they do detect a trend, they typically have little clue how to alleviate the same.
Problems that software developers face have often arisen before in other software development projects under similar circumstances or in similar environments. A typical software development project emits out many events related to the activities performed by developers. Analyses of those events or even just information about those events could be useful to a developer to suggest the needed guidance to mitigate problematic situations. When a problem arises, it would be helpful to a developer to obtain information about the problem as it has previously arisen, such as the frequency with which it has arisen, the environment in which it developed, other problems or events with which it has been associated, and successful and unsuccessful approaches that others may have used in attempts to resolve the problem.
However, project tools today have a very limited ability to aid and assist a software developer when he/she gets stuck or encounters problems repeatedly, unless the developer explicitly asks for assistance. Further, conventional software development systems typically do not provide developers with assistance in detecting trends in problems.
Not only does software development generate a considerable amount of project data pertaining to events and the operation of multiple servers, repositories, and workstations, it generates considerable data pertaining to the behavior and productivity of individual software developers and development teams. Typically, much of the generated data remains unused. Analysis of the data could provide a valuable in-process feedback on the progress of a developer or a development team with the project.
It would be helpful to software development to leverage project data along with profiles of individual developers or development teams to assist developers and development teams in obtaining guidance and in-process feedback.